企业安全建设之HIDS管理与运营
一直以来,企业安全建设中,除了部署各种的硬件安全设备之外,还有购买或自主开发一些安全平台,用于整个安全体系纵深防御的需要,这其中主机安全是重点加难点。
重点在于几乎所有的攻击目的都是为了获取webshell,从而控制服务器,进而获取更多的敏感数据及权限,难点在于各种攻击层出不穷,又加之服务器众多,依靠人工无法及时的监测及发现这些风险,面对这样的情况,自主开发或采购一套主机入侵检测系统(HIDS)就显得迫切了,那么当我们将HIDS部署好后,面对成千上万乃至几十万的主机,我们应该如何管理与运营呢?
目的
1、应急前的资产风险自查及梳理
2、入侵痕迹告警及排查
主要功能
2.1 资产管理
一般大型的企业内部的资产管理工具都是采用CMDB来进行,但针对于中小型企业来说,由于经费的短缺,考虑的都是如何尽可能的利用设备的功能,当前市面上的商用的HIDS都基本上有资产管理的能力,当前这部分主要是针对主机资产的,至于其他的网络资产、应用资产等的管理另当别论了,我们在这暂且不提。
有了这个功能,可以按照负责人、内外网主机、应用情况等几个方面来规划主机资产,这针对后续的告警处置效率以及当前主机资产被入侵的情况,可以非常直观的展示出来,也对主机整体的风险能一览无余。
2.2 风险管理
一般的HIDS都会有提供风险发现的功能,例如清点进程、端口、系统账号、软件应用、数据库、安装包、补丁等,有的甚至会提供默认的安全基线检测功能,但这部分要自定义配置,往往是需要额外付费的。因为功能较多,我们只针对最常用的系统账号清单及进程、端口来具体说明,如下:
2.2.1 进程清点
监测原理如下:
每天的运行进程清点快照值,实时进程启动信息在数据采集模块
进程版本、进程路径、启动参数、运行权限、启动时间、父进程等等
定位特定进程状态:僵尸进程、IO Waiting进程、root权限进程
使用场景:
通过实时监控进程的创建和停止来检测一系列问题(反弹shell、本地提权、隐藏进程)等
情报应急中,特定场景:某xxxx程序被恶意植入了后门,那么除了定位机器上存在程序的,可能无法筛选出已经在运行的程序进行紧急停止使用并铲除,那么就可以通过这个进程关联的信息进行快速筛选。
2.2.2 端口清点
监测原理如下:
每天的开放端口清点快照值,可以不用实时监控端口开放
端口号、关联进程、绑定ip、协议类型等
每个开放端口都可以与启动进程关联
使用场景:
对于云服务器单独管理得话可以检测是否开启不必要端口;
情报应急处理中,部分资产筛选可以通过端口进行定位。如:某XXXX漏洞,默认开放的端口未授权导致远程命令执行,那么也可以通过这个功能点进行应急资产定位。
2.2.3 系统账号清点:
监测原理如下:
每天的系统账号清点快照值,账号变更、登录流水的实时数据在数据采集模块
系统账号指可用于登录操作系统的账号
账号基本属性、最近登录信息、账号密码修改/到期信息、公钥使用情况等
使用场景:
公钥key:密钥登录方式允许客户端无需输入密码,通过已保存的密钥值即可登录服务器,当保存了密钥的主机被攻破时,被允许通过密钥登录的服务器很可能也会被攻击者拿下,那么则其他的机器也应该作为一并应急处理的对象;
密码信息:密码定期修改要求落地,是痛点,账号清点功能可以帮助客户一键导出密码超长使用的账号,组织整改;
账号权限:开发、业务部门为了方便,建立高权账号而账号管理手段也比较缺失,容易引入安全风险,账号清点功能可以快速筛选权限异常的账号(root、sudo等)。
2.3 入侵检测
入侵检测的功能,主要包含暴力破解、本地提权、反弹webshell、异常登录、web后门等入侵情况进行监测,这也是日常的攻击行为中,比较遇到的比较普遍的场景,这次也只重点描述几个场景,其他有兴趣的可以继续深究。
2.3.1 暴力破解
监测原理:
1台主机对特定的账号短时间内进行多次尝试登录失败;
1台主机对不存在的账号进行尝试登录1次及以上;
利用多台主机分布式对一台主机进行尝试登录。(1台尝试1次错误可能不会触发规则、或者封停)。
使用场景:
攻击者入侵时通过工具对服务器系统进行暴力破解,能被及时响应并作封停处理;
2.3.2 反弹webshell
监测原理:
audit插件在监听到主机上面新的进程创建的事件后, 会触发反弹shell的检测的lua脚本执行;
会依据进程名称的白名单和黑名单过滤一批检测的进程;
依据进程的pid获取/proc/$pid/fd目录下面的0,1两个序号的文件句柄的类型,判断是是否是“socket”, “named pipe”,“char device”这几种类型;
如果两个文件句柄的类型都是“socket”就属于shell的反弹检测;如果两个文件句柄的类型属于“named pipe”或 “char device” 这两种类型,就认为属于反弹木马的检测;
检测指定进程的stdin(0), stdout(1),stderr(2)这三个句柄是否属于tcp或者udp类型,如果当前进程检测不成功就会对对应的父进程下面的对应的句柄进行检测;
如果上中的stdin的检测通过, stdout或者stderr这两个有一个检测通过, 就会进入到下一步,对应的句柄指向的远程的IP和端口进行检测;
如果检测到对应句柄指向的IP是本地IP, 就继续检测端口是否合法, 合法就直接返回, 不进行上报, 否则就获取信息, 认为属于反弹shell的检测;
使用场景:
一般用于监测外部通过各种手段在web应用中留下了webshell的脚本,便于控制权限或获取数据
日常内部的安全检测中,遗留下的测试脚本
如何管理与运营
3.1 Agent管理
当前市面上的HIDS平台,基本都是存在管理端与客户端,客户端一般都是轻量的agent探针,这种探针权限基本上都挺高的,便于收集各种数据,及时与管理端同步,但随着主机的不断增加,那agent的数量也会增多,怎么有效的管理成了一大问题,在日常的运营中,针对agent的管理一般会分为安装管理及离线管理两方面。
3.1.1 Agent安装管理
为什么对agent的安装进行管理呢?那是因为一般的公司里面是没有CMDB的,很多都是用excle维护,好一点的采用的就是一个小的平台,但数据也未有及时的更新,所以导致的是主机资产不全及不准确,所以我们在对agent进行安装的时候,其实也是对主机资产做一下梳理,一般来说会从以下几个维度考虑:
1、梳理当前存量的主机资产,以部门为单位进行分批次安装;
2、先在测试环境安装,再生产环境安装;
3、先少量安装,后再采取批量安装;
4、对当前的应用按照核心系统、重要系统、一般系统做区分,先安装一般系统的主机,再依次安装;
5、做好安装相关的操作指引及排错步骤,便于同事能按照步骤处理;
6、如agent已逐步推动,可以将agent作为基础软件,嵌入镜像中,省去安装的烦恼;
7、区分代理区与非代理区的主机,安装参数会有变化;
8、不要要求agent安装率100%,是否安装取决于业务,切记强压安装;
9、友好沟通,以服务的态度去推动
10、如果有条件的,可以将HIDS与CMDB或者资产管理系统相关联,便于及时知晓未安装主机的情况;
11、创建并维护好无法安装主机白名单。
3.1.2 Agent离线管理
有很多运营过HIDS的同学可能对关注agent安装率,但往往会忽略或不愿意管Agent离线情况,很大的原因在于agent离线的问题各种各样,有网络问题、密码定期改密离线、主机被重装、关机等原因,未有一个系统的解决方式,但做为深受其困扰的我,个人建议一定要关注,这跟agent的运行原理有关系,如果agent离线,管理端是不会收到任何数据的,从而导致主机的风险情况未知,也相当于跟未安装agent的结果一样,那日常的agent离线我们应该怎么样?
1、建立agent离线问题知识库,便于同事查询及便捷处理;
2、与运维、网络部门建立好的同步机制,针对重装,下线、关机、网络问题等情况,及时同步信息;
3、Agent离线率不要设置为100%;
4、定期清理长期离线主机(一般是30天);
3.2 告警管理
针对前面的一些重要功能,HIDS的管理端一般都会各种告警行为,那针对各种告警情况,我们日常的运营中应该如何呢?
3.2.1 告警工单管理
1、通过python脚本,将HIDS管理端的一些告警事项与工单系统结合联动,全自动获取告警信息;
2、建立告警处置机制,当出现告警情况时,能实时的同步至工单平台,再由专人处置;
3、优化告警规则,便于过滤无效告警;
3.2.2 暴力破解运营
1、由于系统负责人重装系统、更换主机IP、修改账号密码,导致运维监控系统代理原本记录的密码未同步,而不断的以旧密码登录机器,就触发了告警。(运维监控代理用户sysreadonly)
2、系统负责人忘记密码多次尝试登录。
3、系统负责人登录错机器使用了错误的用户名登录。
4、系统负责人存在使用脚本登录到对应用户的进行一些自动化操作,但是可能存在系统负责人改了密码之类的,而原本的脚本还在跑着所以产生告警。
3.2.3 弱密码运营
1、建立定期自动扫描主机层、数据库层弱口令的机制;
2、建立白名单机制,便于记录无法改密的主机或数据库;
3、收集公司及外部常见的弱密码,在管理端通过添加自定义的密码字典进行扫描;
3.2.4 反弹shell运营
1、与负责人建立告警机制,例如查看具体的详细告警,通过进程树和父进程执行命令内容做个初步的判断,如果查看是反弹ip为外网IP,则需尽快联系主机负责人确认问题,可将包括主机IP 、时间、带有相关进程命令告警截图 、反弹IP等信息发给负责人,提醒及时处置;
2、如反弹shell属于内网IP或者是类似scp 、通过install.py等操作出现的告警,同样按照上述的提供4个要素发给负责人,与负责人沟通这个进程操作是否为他自己操作?执行的命令是干什么的?scp的就是文件传输到另外一台服务器之类的告警等等,便于查找,确认原因;
3、与安全检测的同事做好沟通,安全测试或者渗透测试时及时报备,避免浪费时间处理在正常测试导致的webshell告警
3.2.5后门检测运营
1、针对于可疑文件和可疑脚本,这种可以使用火眼沙箱进行一个检测。因为这种一般可以被执行;
2、可疑脚本的话具有一定的代码语言可以自行进行阅读查看是否存在问题;
3、与可疑进程文件一样,也可以丢到微步和vt进行一个md5威胁情报比对。当然他们也有沙箱。
本篇文章主要针对以上几个内容进行运营,至于其他的运营内容,有兴趣的同学可以自行研究。
总结与提升
针对HIDS的功能,运营及管理,可能都有些了解了,有些同学可能都会忙于处理告警而忽略了一点,那就是运营其实是个持续总结与优化的过程,那样才能越来越好,我们可以从如下几个方面考虑:
1、熟悉HIDS的功能及检测原理(与厂商的人员沟通,组织培训);
2、建立知识库,收集日常运营中的常见问题,形成知识沉淀;
3、以自动化的思维去运营,尽量减少人工的参与,提高效率,可以从优化规则开始;
因为自己状态的问题,这篇文章也写了很长一段时间,总算是写完了,在此特别鸣谢@杰鑫提供的帮助,谢谢
本文作者:jary